Цифровой скиталец

Мы живём, пока мы летаем

MapReduce, LINQ, фнукциональные языки

В последнее время как-то на одну тему попадаются интересные вещи.

Вот, например, что такое великий программистский принцип MapReduce, который позволил компании Гугль заиметь цену акций в 500 долларов за штуку?

Это очень просто, читаем Джоэля. Он кстати гомик, но мы любим его не за это (TM). А вот то, что он часто гиперболизирует и фантазирует не стесняясь, ему стоит поставить в минус.

У него там написано, что это всё пошло от функционального программирования, которые многие крутые программмисты считают куда более мощным и правильным средством, чем наши родные императивные языки вроде Си.

Я вообще Солженицына не читал, но не согласен. Может, функциональные языки и стоит знать, но для повседневного применения и читабельности их могут использовать считанные единицы математичски подкованных разработчиков. Я писал про таких недавно; сам я на это не способен.

А вот что интересно, так это то, что в третью версию С# Microsoft добавит LINQ. Это крайне интересное и мощное средство, которое делает много чего. Можно даже назвать его уникальным; такого ещё  не было.

Оно  привносит в с# элементы функциональных языков  вроде лямбда-выражений. Лябда-выражение применительно к нашим баранам это всего лишь сверхсокращённое определение функции.

Например, выражение  s=> s >5 определит функцию
bool Func1(int s)
{
   return s >5;
}

Привносит элементы скриптовых языков в виде динамического определения типа по присваемому выражению
Например, после выражения
var a="text";
тип переменной а станет string , а значение - "text"
(Ох, как этим будут злоупотреблять)

Позволяет манипулировать данными в коллекциях и XML, используя SQL-подобный синтаксис (это завязано на возможности , описанные выше)

И даже частично решает проблеу Object-Relational mapping, то есть автоматического соотнесения строк в таблице базы данных и членов класса.  Обычно это делает программист, корябая кучу кода вручную.

В LINQ запрос выглядит как sql, записанный прямо в код, и транслируется в настоящий sql, выполняющийся в базе. Как результат создаётся автоматически и возвращается новый класс, в котором поля являются колонками таблицы в базе. А строки - это коллекция таких классов.

Ко всему этому стоит добавить, что LINQ содержит встроенные  Map и Reduce. Правда, называются они там по-другому. (Это те самые легендарные MapReduce от Гугля, см. выше.)

Таким образом, Майкрософт не только в очередной раз тырит хорошие идеи, а улучшает их и в чём-то даже революционизирует.

Но на мой сугубо дилетантский взгляд это вызовет следующие проблемы: хотя простое применение LINQ улучшает читабельность и упрощает работу с данными, понимание и углублённое использование LINQ требует немало дополнительных усилий от неподготовленных разработчиков. То есть M$ сделала C# ещё сложнее, мощнее и в чём-то запутаннее.

А цель-то была сделать его простым и читабельным, нет? Если они  хотели мощи, надо было сразу пропагандировать и внедрять функциональный язык вроде OCAML или Haskell.
Правда у M$ есть свой такой язык - F#, который является диалектом OCaml'а.

Но это прекрасный, прекрасный, прекрасный инструмент. Я стану пользоваться им, я уверен.